package com.jrx.anytxn.param.service.account;

import com.jrx.anytxn.i18n.response.TxnPage;
import com.jrx.anytxn.common.exception.TxnException;
import com.jrx.anytxn.param.dto.account.SubjectTableReq;
import com.jrx.anytxn.param.dto.account.SubjectTableRes;
import com.jrx.anytxn.param.entity.GaSubjectTable;

import java.util.List;

/**
 * @Classname SubjectTableService
 * @Description 科目表接口层
 * @Date 2019/7/5 0005 下午 14:15
 * @Created yf
 */
public interface ISubjectTableService {

    /**
     * 根据租户ID和科目表ID删除信息
     *
     * @param tenantId  租户ID
     * @param subjectId 科目表ID
     * @return java.lang.Boolean
     * @author fan.yang
     * date: 2019/10/15 0015 下午 16:20
     */
    Boolean removeByTenIdAndSuubjectId(String tenantId, String subjectId) throws TxnException;

    /**
     * 根据租户ID和科目表ID修改科目表信息
     *
     * @param subjectTableReq 科目表请求实体
     * @return com.jrx.anytxn.param.dto.account.SubjectTableRes
     * @author fan.yang
     * date: 2019/10/15 0015 下午 16:14
     */
    SubjectTableRes modifySubjectTable(SubjectTableReq subjectTableReq);


    /**
     * 增加科目表信息
     *
     * @param subjectTableReq 科目请求实体
     * @return com.jrx.anytxn.param.dto.account.SubjectTableRes
     * @author fan.yang
     * date: 2019/10/15 0015 下午 16:11
     */
    SubjectTableRes addSubjectTable(SubjectTableReq subjectTableReq) throws TxnException;

    /**
     * 根据租户Id分页查询
     *
     * @param pageNum  页码
     * @param pageSize 页大小
     * @param tenantId 租户ID
     * @return com.jrx.anytxn.common.data.TxnPage<com.jrx.anytxn.param.dto.account.SubjectTableRes>
     * @author fan.yang
     * date: 2019/10/15 0015 下午 16:04
     */
    TxnPage<SubjectTableRes> getAllPageByTenId(Integer pageNum, Integer pageSize, String tenantId,String subjectId) throws TxnException;

    /**
     * 通过科目表ID和租户ID查询信息
     *
     * @param subjectId 科目表ID
     * @param tenantId  租户ID
     * @return com.jrx.anytxn.param.dto.account.SubjectTableRes
     * @author fan.yang
     * date: 2019/10/15 0015 下午 16:09
     */
    SubjectTableRes getByTenIdIdAndSubjectId(String subjectId, String tenantId) throws TxnException;

    /**
     * 查询所有该状态的 科目号 用于batch 批次
     * @param status 状态
     * @return List<String>
     * @author xqy
     * @date 2019/9/16 16:31
     */
    List<GaSubjectTable> getAllSubjectId(String status);

    /**
     * 获得科目的下拉列表
     * * @param
     *
     * @return java.util.List<com.jrx.anytxn.param.dto.account.SubjectTableRes>
     * @author Qingyao Xing
     * @date 2019/9/17 13:44
     */
    List<SubjectTableRes> getAllSubject(String tenantId,String subjectId);

    /**
     * 获取有效状态的科目ID下拉列表
     * @author fan.yang
     * date: 2019/11/27 0027 下午 17:18
     * @param tenantId
     * @return java.util.List<com.jrx.anytxn.param.dto.account.SubjectTableRes>
     */
    List<SubjectTableRes> getEffectiveSubjectIds(String tenantId);

    /**
     * 根据科目表的余额方向获取科目表list
     *
     * @param balDirection
     * @return java.util.List<com.jrx.anytxn.param.dto.account.SubjectTableRes>
     * @author: fan.yang
     * @date: 2019/10/9 0009 下午 14:40
     */
    List<SubjectTableRes> findSubjectList(String balDirection, String tenantId,String orgId);

    List<SubjectTableRes> getEffectiveSubjectIdsByOrgId(String tenantId, String orgId);
}
